Utilizing snapshots to provide builds to developer computing devices

ABSTRACT

A method and system for utilizing snapshots to provide software builds to developer computing devices is described. In some examples, the system, in response to receiving a request for a software build, performs a snapshot of a storage volume containing the requested build, and mounts the snapshot to the developer computing device, enabling the developer computing device to access the software build. In some examples, the system, in response to receiving a request for a software build, establishes a virtual machine, performs a snapshot of a storage volume containing the requested build, mounts the snapshot to the established virtual machine, and provides the virtual machine to the requesting computing device.

CROSS-REFERENCE TO RELATED APPLICATIONS

This application is related to U.S. patent application Ser. No.12/553,294, filed on Sep. 3, 2009, entitled SYSTEMS AND METHODS FORMANAGEMENT OF VIRTUALIZATION DATA, which is incorporated by reference inits entirety.

BACKGROUND

The development of software is generally done as a series of softwarebuilds, also known as development builds, dev builds, or just builds. Abuild may refer to a process of converting source code files intostandalone software artifacts capable of being run by a computer, or theresult of such a process. Thus, during the creation of software,developers may create many different builds, such as weekly or evendaily builds, before reaching a final product.

As can be appreciated, a single computing machine is often unable tomanage and store many builds during the development of software, andarrays and other external storage devices may be utilized. However,although the arrays may provide enough storage for a developmentenvironment, conventional systems require the copying and moving aroundof build data to developers requesting the data. Such moving andcopying, often manual processes, may not be feasible for many softwaredevelopment environments, such as software development environments thatinclude many software developers creating and modifying many builds overa network.

There is a need for a system that overcomes the above problems, as wellas providing additional benefits.

BRIEF DESCRIPTION OF THE DRAWINGS

FIG. 1 is a block diagram illustrating a computing environment in whichaspects of the system may be implemented.

FIG. 2 is a block diagram illustrating components of a managementcomponent associated a software build environment.

FIG. 3 is a block diagram illustrating a virtualization layer in whichaspects of the system may be implemented.

FIG. 4 is a flow diagram illustrating a routine for providing adevelopment build to a computing device.

FIG. 5 is a flow diagram illustrating a routine for providing a virtualmachine associated with a development build to a computing device.

DETAILED DESCRIPTION Overview

A method and system for utilizing snapshots to provide software buildsto developer computing devices is described. In some examples, thesystem, in response to receiving a request for a software build,performs a snapshot of a storage volume containing the requested build,and mounts the snapshot to the developer computing device, enabling thedeveloper computing device to access the software build.

In some examples, the system, in response to receiving a request for asoftware build, establishes a virtual machine, performs a snapshot of astorage volume containing the requested build, mounts the snapshot tothe established virtual machine, and provides the virtual machine to therequesting computing device.

Thus, the system, in some examples, enables software developers in asoftware build environment to access builds stored within theenvironment without requiring the build environment to copy and/ortransfer the build to computing devices associated with the softwaredevelopers, among other benefits. Furthermore, the system, in someexamples, provides software developers with virtual build environments,including any requested builds and/or computing resources associatedwith the build, in order to provide the developers with the build dataand resources needed to perform certain tasks during the development ofsoftware. Such a system may facilitate a faster, more accurate,development of software, among other things.

The system will now be described with respect to various embodiments.The following description provides specific details for a thoroughunderstanding of, and enabling description for, these embodiments of thesystem. However, one skilled in the art will understand that the systemmay be practiced without these details. In other instances, well-knownstructures and functions have not been shown or described in detail toavoid unnecessarily obscuring the description of the embodiments of thesystem.

The terminology used in the description presented below is intended tobe interpreted in its broadest reasonable manner, even though it isbeing used in conjunction with a detailed description of certainspecific embodiments of the system. Certain terms may even be emphasizedbelow; however, any terminology intended to be interpreted in anyrestricted manner will be overtly and specifically defined as such inthis Detailed Description section.

Suitable System

FIGS. 1 and 2 and the following discussion provide a brief, generaldescription of a suitable computing environment in which the system canbe implemented. Although not required, aspects of the system aredescribed in the general context of computer-executable instructions,such as routines executed by a general-purpose computer, e.g., a servercomputer, wireless device or personal computer. Those skilled in therelevant art will appreciate that the system can be practiced with othercommunications, data processing, or computer system configurations,including: Internet appliances, network PCs, mini-computers, mainframecomputers, and the like. Indeed, the terms “computer,” “host,” and “hostcomputer” are generally used interchangeably herein, and refer to any ofthe above devices and systems, as well as any data processor.

Aspects of the system can be embodied in a special purpose computer ordata processor that is specifically programmed, configured, orconstructed to perform one or more of the computer-executableinstructions explained in detail herein. Aspects of the system can alsobe practiced in distributed computing environments where tasks ormodules are performed by remote processing devices, which are linkedthrough a communications network, such as a Local Area Network (LAN),Wide Area Network (WAN), Storage Area Network (SAN), Fibre Channel, orthe Internet. In a distributed computing environment, program modulesmay be located in both local and remote memory storage devices.

Aspects of the system may be stored or distributed on computer-readablemedia, including magnetically or optically readable computer discs,hard-wired or preprogrammed chips (e.g., EEPROM semiconductor chips),nanotechnology memory, biological memory, or other data storage media.Indeed, computer implemented instructions, data structures, screendisplays, and other data under aspects of the system may be distributedover the Internet or over other networks (including wireless networks),on a propagated signal on a propagation medium (e.g., an electromagneticwave(s), a sound wave, etc.) over a period of time, or they may beprovided on any analog or digital network (packet switched, circuitswitched, or other scheme). Those skilled in the relevant art willrecognize that portions of the system reside on a server computer, whilecorresponding portions reside on a client computer, and thus, whilecertain hardware platforms are described herein, aspects of the systemare equally applicable to nodes on a network.

FIG. 1 is a block diagram illustrating a computing environment 100 inwhich aspects of the system may be implemented. The computingenvironment 100 includes one or more development machines 110 a, 110 b,110 c, associated with software developers, that create build data to bestored in arrays 150 a, 150 b in communication with the developmentmachines 110 a-c over a network 120. The arrays 150 a, 150 b may be anynumber of different storage arrays. Examples include IBM XIV arrays, HPStorageWorks, EMC Symmetrix, and so on. The arrays 150 a-b may includevarious components utilized during storage and restoration of datawithin the arrays, such as snapshot components 155 a, 155 b. Thesnapshot components 155 a-b may perform snapshots on data stored withinthe array volumes 150 a-b, such as build data.

In some cases, a snapshot refers to the state of a system as a specificpoint in time. For example, a snapshot component may create a read-onlycopy of a data set within a volume at a point in time, allowingapplications to continue writing data to the volume. Generally, snapshotcomponents are efficient and do not unduly tax a volume. In someexamples, once the initial snapshot is taken of a volume, subsequentincremental snapshots copy changed data only, and use a system ofpointers to reference the initial snapshot. Such a technique may consumeless disk capacity versus continually taking a snapshot of an entirevolume. Read-write snapshots are sometimes called branching snapshots,because they implicitly create diverging versions of their data. Inaddition to backups and data recovery, read-write snapshots may be usedin virtualization, sandboxing, virtual hosting, and other regimes,because of their usefulness in managing changes to large sets of files,among other things.

The arrays 150 a-b may include hardware snapshot components associatedwith the type of array. For example, an IBM XIV array includes asnapshot component configured to take snapshots of data sets stored inthe array volume. The computing environment 100 may include othersnapshot components not array specific, such as software-based snapshotcomponents used in data storage systems, such as the CommVault Simpanasystem, available from CommVault Systems, Inc.

The computing environment 130 also includes a development manager 130,which may include a virtual layer capable of establishing a virtualmachine environment 135 accessible by one or more of the developmentmachines 110 a-c. The development manager 130 may provide variousmanagement functions associated with the development of software withinthe computing environment 100, including storage functions, indexingfunctions, control functions, coordination functions, build management,and so on. The development manager 130 may provide some or all resourcesand data by utilizing a cloud-based computing system 140, or othercomputing resources (not shown). For example, the development manager130 may establish a virtual machine 135 to be accessed by thedevelopment machines 110 a-c within the cloud-based computing system140.

The development manager 130 may function, in part, as a build tool forsoftware development within computing environment 100. The process ofbuilding computer software is usually managed by a build tool, which isa program that coordinates and controls other programs. Examples of sucha program include make, ant, maven, SCons, Phing, and so on, The buildtool, which may also be stored on development machines 110 a-c, oftencompile and/or link various files, in the correct order. For example, ifthe source code in a particular file has not changed, then it may notneed to be recompiled. Further details regarding the development manager130 will now be discussed with respect to FIG. 2.

FIG. 2 is a block diagram illustrating components of a developmentmanager 135 associated with a software build environment. Thedevelopment manager 135 includes a user interface component 210, asnapshot management component 220, an optional virtual machine component230, a reservation management component 240, and other components 250.

In some examples, the user interface component 210 provides an interfaceto the development machines 110 a-c that presents developers with buildsavailable to be accessed. For examples, the user interface component 210may present a list of builds available to a developer at his/herdevelopment machine 110 a, and receive input indicating a selection of adesired build.

In some examples, the snapshot management component 220 facilitates theperformance of snapshot on volumes that store build data. For example,the snapshot management component 220, in response to the systemreceiving a request for access to a certain build, may cause a snapshotcomponent 155 a at an external array 150 a storing the requested buildto take a snapshot of the volume storing the requested build. Thesnapshot management component 220 may also cause or facilitate themounting of the taken snapshot to the requesting development machine 110a or to a virtual machine 135 which may be establishes by the virtualmachine component 230.

In some examples, the reservation management component 240 monitorsand/or managers the provision of snapshot-based access of developmentmachines 110 a-c to builds stored in arrays 150 a-c. For example, thereservation management component 240 may reserve a certain number ofdevelopment machines for a certain build, may delete snapshots once adevelopment machine is finished with a provided build, and/or mayperform other functions described herein.

For example, in collaboration with the virtual machine component 230,the reservation management component 240 may cause a virtual machine tobe established and provided to a development machine 110 a in responseto a request from the development machine 110 a for a certain build.FIG. 3 is a block diagram illustrating a virtualization layer 135 inwhich aspects of the system may be implemented.

In general, virtualization refers to the simultaneous hosting of one ormore operating systems on a physical computer. Such virtual operatingsystems and their associated virtual resources are called virtualmachines. Virtualization software sits between the virtual machines andthe hardware of the physical computer. One example of virtualizationsoftware is ESX Server, by VMware, Inc. of Palo Alto, Calif. Otherexamples include Microsoft Virtual Server and Microsoft Windows ServerHyper-V, both by Microsoft Corporation of Redmond, Wash., and Sun xVM bySun Microsystems Inc. of Santa Clara, Calif. Virtualization softwareprovides to each virtual operating system virtual resources, such as avirtual processor, virtual memory, a virtual network device, and avirtual disk. Each virtual machine has one or more virtual disks.Virtualization software typically stores the data of virtual disks infiles on the file system of the physical computer, called virtualmachine disk files (in the case of VMware virtual servers) or virtualhard disk image files (in the case of Microsoft virtual servers). Forexample, VMware's ESX Server provides the Virtual Machine File System(VMFS) for the storage of virtual machine disk files. A virtual machinereads data from and writes data to its virtual disk much the same waythat an actual physical machine reads data from and writes data to anactual disk.

Referring to FIG. 3, the virtual layer 135 may operate on on or behosted by a computing device, such as the development manager 130. Thevirtual layer 135 may also include or be connected to a virtual datastore, such as primary data store disk 316 or secondary data store disk318, connected to the virtual layer via a storage area network. Thevirtual layer 135 also includes a virtual machine storage manager 320operating on or being hosted by another computing device, which may beanother server, and a secondary storage data store 330 connected to thecomputing device. The computing devices may be connected to each othervia a network, which may be a LAN, a WAN, the public Internet, someother type of network, and so on.

The virtual layer hosts one or more virtual machines 310. The virtualmachine 310 includes an operating system 314 and one or moreapplications 312 executing on the operating system or loaded on theoperating system. The operating system 314 may be any type of operatingsystem, such as Microsoft Windows 95/98/NT/2000/XP/2003/2008/2010, Linuxoperating systems, Sun Solaris operating systems, UNIX operatingsystems, Apple OSx, and so on, that can be hosted by the virtual layer315. The applications 312 may be any applications (e.g., databaseapplications, file server applications mail server applications, webserver applications, transaction processing applications, snapshotapplications, media streaming applications, build applications, and soon) that may run on the operating system 314. The virtual machine mayalso be connected to the various networks described herein.

The operating system 312 may be connected to the virtual storage disks316, 318 via the SAN, which may be any type of SAN, such as a FibreChannel SAN, an iSCSI SAN, or any other type of SAN. A primary storagedata store may store the virtual disks 316, 318 of the virtual machine310 hosted by the virtual layer 135. A virtual disk 316, 318 maycorrespond to one or more files (e.g., one or more*.vmdk or*.vhd files)on the primary storage data store. The primary storage data store maystore a primary copy of the data of the virtual machine 310.Additionally or alternatively, the virtual disks 316, 318 may be storedby other storage devices in a data storage system, such as in thecloud-based computing system 140.

A primary copy of data generally includes a production copy or other“live” version of the data that is used by a software application and isgenerally in the native format of that application. Primary copy datamay be maintained in a local memory or other high-speed storage device(e.g., on the virtual disks 316, 318 located in the primary storage datastore) that allows for relatively fast data access, if necessary. Suchprimary copy data may be intended for short-term retention (e.g.,several hours or days) before some or all of the data is stored as oneor more secondary copies, for example, to prevent loss of data in theevent a problem occurs with the data stored in primary storage.

In contrast, secondary copies include point-in-time data and aretypically intended for long-term retention (e.g., weeks, months, oryears depending on retention criteria, for example, as specified in astorage or retention policy) before some or all of the data is moved toother storage or discarded. Secondary copies may be indexed so users canbrowse and restore the data at another point in time. After certainprimary copy data is backed up, a pointer or other location indicia,such as a stub, may be placed in the primary copy to indicate thecurrent location of that data.

The virtual machine storage manager 320 includes a virtual machinestorage operation component, which includes a Virtual Logical UnitNumber (VLUN) driver for accessing virtual disks 316, 318, and a virtualmachine mount component for mounting virtual machines. The virtualmachine storage manager 320 also includes a data agent. The data agentincludes an integration component that provides functionality for thevirtual machine storage operation component. The data agent alsoincludes a virtual disk analyzer component that examines the virtualdisk and configuration files corresponding to the virtual disks 316, 318and extracts metadata from the virtual disk and configuration files. Forexample, the integration component may include a set of scripts that thedata agent causes to be run prior to, during, and/or following a copy ofvirtual machine data. As another example, the integration component maybe a component that encapsulates or wraps the virtual machine mountcomponent and provides an Application Programming Interface (API) withfunctions for accessing the virtual machine mount component. The virtualmachine storage manager 320 also includes a data store 330 thatmaintains data used by the virtual machine storage manager 320, such asdata used during storage operations, and configuration data.

Virtual disks 316, 318 may have various configurations. As previouslydescribed, a virtual disk 316, 318 corresponds to one or more virtualdisk files (e.g., one or more*.vmdk or *.vhd files) on a primary storagedata store. A virtual layer 135 may support several types of virtualdisks 316, 318. For example, a virtual disk may be either: 1) a growablevirtual disk contained in a single virtual disk file that can grow insize (e.g., a monolithic sparse virtual disk that starts at 2 GB andgrows larger); 2) a growable virtual disk split into multiple virtualdisk files (e.g., a split sparse virtual disk comprising multiple 2 GBvirtual disk files), the aggregation of which can grow in size by addingnew virtual disk files; 3) a preallocated virtual disk contained in asingle virtual disk file (e.g., a monolithic flat virtual disk, the sizeof which does not change); or 4) a preallocated virtual disk split intomultiple virtual disk files (e.g., a split flat virtual disk comprisingmultiple 2 GB virtual disk files, the number of which and the size ofeach of which does not change). Where a virtual disk is split intomultiple virtual disk files, each individual virtual disk file is calledan extent. A virtual layer 135 may also support types of virtual disksother than these types. Those of ordinary skill in the art willunderstand that a virtual disk can be structured in a wide variety ofconfigurations, and that virtual disks are not limited to theconfigurations described herein.

A virtual layer 135 may support snapshotting, or taking a snapshot of avirtual machine. The virtual layer 135 can snapshot a virtual machine ina linear fashion (in which there is only one branch of snapshots fromthe original state of the virtual machine, and each snapshot in thebranch linearly progresses from prior snapshots) or in a process tree(in which there are multiple branches of snapshots from the originalstate of the virtual machine, and two snapshots may or may not be in thesame branch from the original state of the virtual machine). When asnapshot is taken of a virtual machine, the virtual machine stopswriting to its virtual disks (e.g., stops writing to the one or more*.vmdk files). The virtual machine writes future writes to a delta diskfile (e.g., a *delta.vmdk file) using, for example, a copy-on-write(COW) semantic. As the virtual machine layer 135 can snapshot a virtualmachine repeatedly, there can be multiple delta disk files. The virtualdisk and delta disk files can be analogized to links in a chain. Usingthis analogy, the original disk file is a first link in the chain. Afirst child delta disk file is a second link in the chain, and a secondchild delta disk file is a third link in the chain, and so forth.

Also as previously described, a virtual machine generally has associatedconfiguration files that a virtual layer 135 uses to store configurationdata about the virtual machine. These configuration files may include a*.vmx file, which stores data about the parent-child relationshipscreated between virtual disk files and delta disk files when a snapshotof a virtual machine is taken. These configuration files may alsoinclude a disk descriptor file (e.g., a *.vmdk file). In some examples,instead of using a disk descriptor file, the disk descriptor is embeddedinto a virtual disk file (e.g., embedded in a *.vmdk file).

The disk descriptor file generally stores data about the virtual diskfiles that make up a virtual disk 316, 318. This data includesinformation about the type of the virtual disk. For example, the virtualdisk may be a monolithic flat virtual disk, a monolithic sparse virtualdisk, a split flat virtual disk, a split sparse virtual disk or anothertype of a virtual disk. This data also includes an identifier of theparent of the virtual disk file, if it has one (if the virtual machinehas been snapshotted, its original virtual disk file will have a childvirtual disk file), a disk database describing geometry values for thevirtual disk (e.g., cylinders, heads and sectors) and informationdescribing the extents that make up the virtual disk. Each extent may bedescribed by a line in the disk descriptor file having the followingformat: [type of access] [size] [type] [file name of extent]. Followingis an example of a line in the disk descriptor file describing anextent: [0053]RW 16777216 VMFS “test-flat.vmdk.” This line describes anextent for which read/write access is allowed, of size 16777216 sectors,of type VMFS (e.g., for use on a primary storage data store), and thefilename of the virtual disk file—“test-flat.vmdk.”

A virtual layer 135 provides an abstraction layer such that the one ormore virtual disks files (and any delta disk files) of the virtual disks316, 318 appear as one or more actual disks (e.g., one or more hard diskdrives) to a virtual machine. Because the virtual layer 135 abstractsthe virtual disk so that it appears as an actual disk to an operatingsystem 314 executing on the virtual machine 310, the operating system314 can generally use its standard file system for storing data on avirtual disk 316, 318. The various structures used by the file systemand the operating system 314 (e.g., the partition table(s), the volumemanager database(s) and the file allocation table(s)) are stored in theone or more virtual disk files that make up a virtual disk.

For example, a virtual layer 135 may store a single virtual disk file(e.g., a single *.vmdk file) that is a preallocated virtual disk (amonolithic flat virtual disk) for each virtual disk used by a virtualmachine operating on the virtual layer 135. The single virtual disk filemay be named <virtual machine name>-flat.vmdk. There would also be adisk descriptor file for the single virtual disk file that wouldtypically be named <virtual machine name>-.vmdk. A snapshot taken of thevirtual machine would result in an additional delta disk file beingcreated that is a single virtual disk file (e.g., a single *.vmdk file),which is a growable virtual disk (a monolithic sparse virtual disk). Thedelta disk file would typically be named <virtual diskname>-<######>-delta.vmdk, where <######> is a number indicating thesequence of the snapshot. There would also be a disk descriptor file forthe single virtual disk file that would typically be named <virtual diskname>-<######>-.vmdk, again, where <######> is a number indicating thesequence of the snapshot.

Further details regarding the establishment of a virtual machine may befound in commonly-assigned U.S. patent application Ser. No. 12/553,294,filed on Sep. 3, 2009, entitled SYSTEMS AND METHODS FOR MANAGEMENT OFVIRTUALIZATION DATA, which is incorporated by reference in its entirety.

Thus, the system may include devices and/or components configured and/orprogrammed to perform snapshots on build data stored in array volumes.Further, the system may include devices and/or components configureand/or programmed to mount the snapshots to requesting developmentmachines, mount the snapshots to established virtual computing providedto requesting development machines, or perform other functions thatfacilitate access to build data via the snapshots.

Utilizing Snapshots to Provide Builds to Computing Devices

As discussed herein, the system enables development machines to accesssoftware builds by utilizing snapshot mechanisms to provide copies ofthe software builds. FIG. 4 is a flow diagram illustrating a routine 400for providing a development build to a computing device.

In step 410, the system presents a display showing available buildswithin a software development environment. For example, a user interfacecomponent 210 may present a user interface that presents a list ofbuilds/data volumes associated with software development to adevelopment machine 110 a. The user interface may be a webpage or otherpage provided within a network that enables developers to review andaccess various different builds during the development of software.

In step 420, the system receives an indication that a build has beenselected at a computing device. For example, the user interfacecomponent 210 presented at a development machine 110 a receives anindication that a developer wishes to access a certain build during thedevelopment of software, such as a selection of a build/volume presentedwithin the user interface.

In step 430, the system performs a snapshot on an external array havinga volume storing the selected build. For example, a snapshot managementcomponent 220, in communication with the user interface component 210,causes a snapshot mechanism at the external array to perform a snapshotof a volume containing the selected build. In some cases, the system mayautomatically perform the snapshot in response to the selection. In somecases, the system may only perform the snapshot once a build isrequested.

In step 440, the system mounts the snapshot to the requesting computingdevice. For example, the snapshot management component 220 may cause thesnapshot to be mounted to the development machine 110 a. In step 450,the system provides access to the requested build. For example, thesystem may provide a drive or other transparent access to a requestedbuild mounted to a development machine.

During access, a developer, via his/her mounted development machine, maymake changes to the build, such as modifications, corrections, and soon. Once access is complete and the development machine no longer needsaccess to the build, the system may delete the snapshot, take a snapshotof the snapshot, automatically take another snapshot when changes aremade to the build, and so on. That is, the system, in response tochanges made to a build, may take a snapshot of the build beforechecking the build back into the development environment. The system maythen delete the original snapshot.

Thus, in some examples, the system provides an automatic way to mountany software build stored in any external storage device to anydevelopment machine creating data for the software build. That is, thesystem enables a developer to view available builds, select a build,access the build, and utilize the build, without copying andtransferring the data of the build across the development environment,among other benefits. In addition, the system, in some examples, mayalso provide a complete build environment to developers, when needed.For example, a certain development machine associated with a developermay not have the tools/resources to compile or otherwise work with abuild provided to the developer. In such examples, the system may enablethe developer to receive the necessary resources along with a desiredbuild. FIG. 5 is a flow diagram illustrating a routine 500 for providinga virtual machine associated with a development build to a computingdevice.

In step 510, the system presents a display showing available buildswithin a software development environment. For example, a user interfacecomponent 210 may present a user interface that presents a list ofbuilds/data volumes associated with software development to adevelopment machine 110 a. The user interface may be a webpage or otherpage provided within a network that enables developers to review andaccess various different builds during the development of software.

In step 520, the system receives an indication that a build has beenselected at a computing device. For example, the user interfacecomponent 210 presented at a development machine 110 a receives anindication that a developer wishes to access a certain build during thedevelopment of software, such as a selection of a build/volume presentedwithin the user interface.

In step 530, the system establishes a virtual machine associated withthe selected build. For example, the system may determine that adevelopment machine requesting a selected build does not includeresources necessary to compile the build. The system may, therefore,establish a virtual machine that includes preinstalled software andother resources associated with the build. That is, the system maycreate a new, virtual build machine that contains all the tools andresources to manipulate the data within the selected build.

In step 540, the system performs a snapshot on an external array havinga volume storing the selected build. For example, a snapshot managementcomponent 220, in communication with the user interface component 210,causes a snapshot mechanism at the external array to perform a snapshotof a volume containing the selected build. In some cases, the system mayautomatically perform the snapshot in response to the selection. In somecases, the system may only perform the snapshot once a build isrequested.

In step 550, the system mounts the snapshot to the established virtualmachine. For example, the snapshot management component 220 may causethe snapshot to be mounted to a virtual machine 135 established by thevirtual machine component 230.

In step 560, the system provides the virtual machine to the computingdevice. For example, the virtual machine component 230 provides avirtual machine and all the necessary build data to a developmentmachine 110 a.

Thus, the system may, in response to a request for build data, establisha virtual machine, mount a snapshot of a volume containing build data tothe establishes virtual machine, and provide the virtual machine to asoftware developer.

In addition to development environments, the system may be utilized byother computing environments. For example, the system may utilize accessto data using snapshot in document storage environments, multimedialibraries, document management systems (e.g., SharePoint), and otherenvironments in which data may be staged and/or accessed by userswithout affecting other users.

In some examples, the system may perform various load balancing onarrays and other external storage devices that take snapshots of dataand provide the data to users within a network. For example, the systemmay balance the load across various connectors in an array when multiplesnapshots are being performed at the array. Additionally, the system mayemploy a reservation policy that limits the time of access of a buildfor a developer. That is, the system may automatically delete snapshotsafter a certain time period of inactivity associated with a developer'saccess of a requested build. Thus, such load balancing techniques mayfacilitate the system to provide access to builds within a developmentenvironment without bottlenecks on storage devices, among otherbenefits.

Therefore, the system, in some examples, enables developers to accessbuilds (and associated computing resources) in a software developmentenvironment by utilizing the snapshot capabilities of external arraysand other data storage components. The snapshot mechanisms facilitatequick and easy access to data associated with builds, providingdevelopers with access to an entire development environment at theirdevelopment machine. Further, the system may establish virtualdevelopment machines to developers, providing developers with a widevariety of resources and data within a development environment.

CONCLUSION

From the foregoing, it will be appreciated that specific embodiments ofthe system have been described herein for purposes of illustration, butthat various modifications may be made without deviating from the spiritand scope of the system. Accordingly, the system is not limited exceptas by the appended claims.

Unless the context clearly requires otherwise, throughout thedescription and the claims, the words “comprise,” “comprising,” and thelike are to be construed in an inclusive sense, as opposed to anexclusive or exhaustive sense; that is to say, in the sense of“including, but not limited to.” The word “coupled”, as generally usedherein, refers to two or more elements that may be either directlyconnected, or connected by way of one or more intermediate elements.Additionally, the words “herein,” “above,” “below,” and words of similarimport, when used in this application, shall refer to this applicationas a whole and not to any particular portions of this application. Wherethe context permits, words in the above Detailed Description using thesingular or plural number may also include the plural or singular numberrespectively. The word “or” in reference to a list of two or more items,that word covers all of the following interpretations of the word: anyof the items in the list, all of the items in the list, and anycombination of the items in the list.

The above detailed description of embodiments of the system is notintended to be exhaustive or to limit the system to the precise formdisclosed above. While specific embodiments of, and examples for, thesystem are described above for illustrative purposes, various equivalentmodifications are possible within the scope of the system, as thoseskilled in the relevant art will recognize. For example, while processesor blocks are presented in a given order, alternative embodiments mayperform routines having steps, or employ systems having blocks, in adifferent order, and some processes or blocks may be deleted, moved,added, subdivided, combined, and/or modified. Each of these processes orblocks may be implemented in a variety of different ways. Also, whileprocesses or blocks are at times shown as being performed in series,these processes or blocks may instead be performed in parallel, or maybe performed at different times.

The teachings of the system provided herein can be applied to othersystems, not necessarily the system described above. The elements andacts of the various embodiments described above can be combined toprovide further embodiments.

These and other changes can be made to the system in light of the aboveDetailed Description. While the above description details certainembodiments of the system and describes the best mode contemplated, nomatter how detailed the above appears in text, the system can bepracticed in many ways. Details of the system may vary considerably inimplementation details, while still being encompassed by the systemdisclosed herein. As noted above, particular terminology used whendescribing certain features or aspects of the system should not be takento imply that the terminology is being redefined herein to be restrictedto any specific characteristics, features, or aspects of the system withwhich that terminology is associated. In general, the terms used in thefollowing claims should not be construed to limit the system to thespecific embodiments disclosed in the specification, unless the aboveDetailed Description section explicitly defines such terms. Accordingly,the actual scope of the system encompasses not only the disclosedembodiments, but also all equivalent ways of practicing or implementingthe system under the claims.

While certain aspects of the system are presented below in certain claimforms, the inventors contemplate the various aspects of the system inany number of claim forms. For example, while only one aspect of thesystem is recited as embodied in a computer-readable medium, otheraspects may likewise be embodied in a computer-readable medium.Accordingly, the inventors reserve the right to add additional claimsafter filing the application to pursue such additional claim forms forother aspects of the system.

I claim:
 1. A method for providing a build to a computing deviceassociated with a developer, the method comprising: providing a userinterface presenting for selection a list of accessible buildsassociated with software under development; receiving via the provideduser interface a request from a computing device to access a selectedbuild within the list of builds associated with the software underdevelopment; determining that the computing device providing the requestdoes not include software resources necessary to compile the requestedbuild; if the computing device does not include the software resources,establishing a virtual machine that includes the software resourcesassociated with the requested build; performing a snapshot of a storagevolume containing the requested build; mounting the snapshot to theestablished virtual machine; providing the established virtual machineto the computing device requesting access to the requested build toprovide the computing device with access to the requested build via themounted snapshot.
 2. The method of claim 1, wherein the storage volumecontaining the requested build is contained by a storage array incommunication with the computing device over a network; and wherein ahardware snapshot mechanism associated with the storage array performsthe snapshot of the volume containing the requested build.
 3. The methodof claim 1, wherein the storage volume containing the requested build iscontained by a storage array in communication with the computing deviceover a network; and wherein a software snapshot mechanism associatedwith a data storage system that stores data to the storage arrayperforms the snapshot of the volume containing the requested build. 4.The method of claim 1, further comprising: deleting the performedsnapshot after the snapshot is dismounted from the computing device. 5.The method of claim 1, further comprising: identifying one or morechanges made to the requested build; and updating the requested build;and deleting the performed snapshot after the snapshot is dismountedfrom the computing device.
 6. The method of claim 1, further comprising:identifying one or more changes made to the requested build; andperforming a snapshot of the snapshot of the volume containing therequested build; and deleting the snapshot of the snapshot of the volumecontaining the requested build after the snapshot is dismounted from thecomputing device.
 7. A system for providing access to a build within adevelopment environment, the system comprising: a memory havinginstructions; and a processor coupled to the memory and configured toexecute: a request component configured to receive a request from acomputing device to access the build within the development environment,wherein the request component is configured to provide a user interfaceto the computing device within the development environment that listsbuilds available to be accessed by the computing device and receives aselection of an available build to be accessed by the computing device;a snapshot component, wherein the snapshot component is configured toperform a snapshot of a storage volume of data containing the build; anda virtualization component, wherein the virtualization component isconfigured to establish a virtual machine and mount the performedsnapshot to the virtual machine and provide the virtual machine to thecomputing device to provide the computing device, via the virtualmachine and the mounted snapshot, with access to the build and withaccess to software resources used to manipulate the build when thecomputing device does not already include the software resources neededto manipulate the build.
 8. The system of claim 7, wherein the volume ofdata is an external storage array and the snapshot component isconfigured to cause a snapshot mechanism associated with the externalstorage array to perform the snapshot of the volume of data containingthe build.
 9. The system of claim 7, wherein the virtualizationcomponent is configured to utilize cloud-based computing resources inorder to establish the virtual machine that mounts the performedsnapshot and provides the computing device within the developmentenvironment access to the build and access to resources used tomanipulate the build.
 10. The system of claim 7, wherein the establishedvirtual machine includes software capable of compiling the requestedbuild.
 11. A non-transitory computer-readable medium whose contents,when executed by a computing device, cause the computing device toperform a method of providing a build to a development machine, themethod comprising: providing a user interface presenting for selection alist of accessible builds associated with software under development;receiving via the provided user interface a request from a computingdevice to access a selected build within the list of builds associatedwith the software under development; determining that the computingdevice providing the request does not include the software and resourcesnecessary to compile the requested build; if the computing device doesnot include the software and resources, establishing a virtual machinethat includes the software and the resources associated with therequested build; performing a snapshot of a storage volume containingthe requested build; mounting the snapshot to the established virtualmachine; providing the established virtual machine to the computingdevice requesting access to the build to provide the computing devicewith access to the build via the mounted snapshot.
 12. Thecomputer-readable medium of claim 11, wherein the volume containing therequested build is contained by a storage array in communication withthe development machine over a network; and wherein a hardware snapshotmechanism associated with the storage array performs the snapshot of thevolume containing the requested build.
 13. The computer-readable mediumof claim 11, wherein the volume containing the requested build iscontained by a storage array in communication with the computing deviceover a network; and wherein a software snapshot mechanism associatedwith a data storage system that stores data to the storage arrayperforms the snapshot of the volume containing the requested build. 14.The computer-readable medium of claim 11, further comprising: deletingthe performed snapshot after the snapshot is dismounted from thedevelopment machine.
 15. The computer-readable medium of claim 11,further comprising: identifying one or more changes made to therequested build; and updating the requested build; and deleting theperformed snapshot after the snapshot is dismounted from the developmentmachine.
 16. The computer-readable medium of claim 11, furthercomprising: identifying one or more changes made to the requested build;and performing a snapshot of the snapshot of the volume containing therequested build; and deleting the snapshot of the snapshot of the volumecontaining the requested build after the snapshot is dismounted from thedevelopment machine.